package OfferLanQiaoBei.a_14届蓝桥真题;

import java.math.BigDecimal;

/*
420940313
420940313
 */

public class a求阶乘后若干位 {
	public static void main(String[] args) {
		a求阶乘后若干位 test = new a求阶乘后若干位();
		test.useDeal();
//		BigDecimal tBigDecimal = new BigDecimal(202320232023L);
//		tBigDecimal = tBigDecimal.multiply(new BigDecimal(202320232022L));
//		System.out.println(tBigDecimal);
//		BigDecimal test1 = test.JieCheng(10);
//		System.out.println(test1);
//		BigDecimal test2 = test.jiecheng(202320232022L);
//		System.out.println(test2);
	}
	
	public void useDeal() {
		BigDecimal res = new BigDecimal(0);
		for (long i = 1; i <= 202320232023L; i++) {
			if (!jiecheng(i).equals(new BigDecimal(0))) {
				res = res.add(jiecheng(i));
				
			} else {
				break;
			}
		}
		BigDecimal[] result = res.divideAndRemainder(new BigDecimal(1e9));
		System.out.println(result[1]);
	}
	
	public BigDecimal jiecheng(long num) {
		BigDecimal res = new BigDecimal(1);
		BigDecimal helper;
		for (long i = 1; i <= num; i++) {
			helper = new BigDecimal(i);
			BigDecimal[] small = res.multiply(helper).divideAndRemainder(new BigDecimal(1e9));
			if (small[1].equals(new BigDecimal(0))) {
				res = small[1];
				break;
			}
			res = small[1];
		}
		return res;
	}
	
	public BigDecimal JieCheng(long num) {
		BigDecimal res = new BigDecimal(1);
		BigDecimal helper;
		for (long i = 1; i <= num; i++) {
			helper = new BigDecimal(i);
			res = res.multiply(helper);
		}
		return res;
	}
}
